package org.jsola.hr.vo.payWx;

import com.alibaba.fastjson.annotation.JSONField;
import io.swagger.annotations.ApiModel;
import lombok.Data;

/**
 * 微信返回的明细信息
 *
 * @author zhr
 */
@ApiModel(description = "微信返回的明细信息")
@Data
public class VxRetuenDetailVO {

    /**
     * 服务商商户号   微信支付分配的商户号，此处为服务商商户号
     */
    @JSONField(name = "sp_mchid")
    private String spMchid;

    /**
     * 商家批次单号 商户系统内部的商家批次单号，在商户系统内部唯一
     */
    @JSONField(name = "out_batch_no")
    private String outBatchNo;

    /**
     * 微信支付批次单号 微信支付批次单号，微信商家转账系统返回的唯一标识
     */
    @JSONField(name = "batch_id")
    private String batchId;

    /**
     * 商户的appid 微信支付批次单号，微信商家转账系统返回的唯一标识微信分配的商户公众账号ID。
     * 特约商户授权类型为INFORMATION_AUTHORIZATION_TYPE和INFORMATION_AND_FUND_AUTHORIZATION_TYPE时对应的是特约商户的appid，
     * 特约商户授权类型为FUND_AUTHORIZATION_TYPE时为服务商的appid
     */
    @JSONField(name = "appid")
    private String appid;

    /**
     * 商家明细单号 商户系统内部区分转账批次单下不同转账明细单的唯一标识
     */
    @JSONField(name = "out_detail_no")
    private String outDetailNo;

    /**
     * 微信支付明细单号 微信支付系统内部区分转账批次单下不同转账明细单的唯一标识
     */
    @JSONField(name = "detail_id")
    private String detailId;

    /**
     * 明细状态 枚举值：
     *     PROCESSING：转账中。正在处理中，转账结果尚未明确
     *     SUCCESS：转账成功
     *     FAIL：转账失败。需要确认失败原因后，再决定是否重新发起对该笔明细单的转账（并非整个转账批次单）
     *     示例值：SUCCESS
     */
    @JSONField(name = "detail_status")
    private String detailStatus;

    /**
     * 转账金额 转账金额单位为“分”
     */
    @JSONField(name = "transfer_amount")
    private Integer transferAmount;

    /**
     * 转账备注 单条转账备注（微信用户会收到该备注），UTF8编码，最多允许32个字符
     */
    @JSONField(name = "transfer_remark")
    private String transferRemark;

    /**
     * 明细失败原因 如果转账失败则有失败原因
     *     ACCOUNT_FROZEN：账户冻结
     *     REAL_NAME_CHECK_FAIL：用户未实名
     *     NAME_NOT_CORRECT：用户姓名校验失败
     *     OPENID_INVALID：Openid校验失败
     *     TRANSFER_QUOTA_EXCEED：超过用户单笔收款额度
     *     DAY_RECEIVED_QUOTA_EXCEED：超过用户单日收款额度
     *     MONTH_RECEIVED_QUOTA_EXCEED：超过用户单月收款额度
     *     DAY_RECEIVED_COUNT_EXCEED：超过用户单日收款次数
     *     PRODUCT_AUTH_CHECK_FAIL：产品权限校验失败
     *     OVERDUE_CLOSE：转账关闭
     *     ID_CARD_NOT_CORRECT：用户身份证校验失败
     *     ACCOUNT_NOT_EXIST：用户账户不存在
     *     TRANSFER_RISK：转账存在风险
     *     PAYROLL_CARD_ALREADY_LOGOUT：该用户的微工卡已经注销
     *     PAYROLL_CARD_ALREADY_FROZEN：该用户的微工卡已经被冻结
     *     PAYROLL_CARD_UNAUTHORIZED：该用户的微工卡未授权该商户
     *     PAYROLL_CARD_USER_NOT_OPEN：该用户没有开通微工卡
     *     示例值：ACCOUNT_FROZEN
     */
    @JSONField(name = "fail_reason")
    private String failReason;

    /**
     * 收款用户openid 收款用户openid。
     * 如果转账特约商户授权类型是INFORMATION_AUTHORIZATION_TYPE，对应的是特约商户公众号下的openid;
     * 如果转账特约商户授权类型是FUND_AUTHORIZATION_TYPE，对应的是服务商商户公众号下的openid。
     */
    @JSONField(name = "openid")
    private String openid;

    /**
     * 收款用户姓名 (微信返回的是加密后的信息，需要解密)
     * 收款方姓名。采用标准RSA算法，公钥由微信侧提供
     */
    @JSONField(name = "username")
    private String username;

    /**
     * 转账发起时间
     * 转账发起的时间，遵循rfc3339标准格式，格式为YYYY-MM-DDTHH:mm:ss.sss+TIMEZONE
     * 示例值：2015-05-20T13:29:35.120+08:00
     */
    @JSONField(name = "initiate_time")
    private String initiateTime;

    /**
     * 明细更新时间
     * 明细最后一次状态变更的时间  遵循rfc3339标准格式，格式为YYYY-MM-DDTHH:mm:ss.sss+TIMEZONE
     * 示例值：2015-05-20T13:29:35.120+08:00
     */
    @JSONField(name = "update_time")
    private String updateTime;

}

